package com.java.base.exercise.current;


import java.util.concurrent.BlockingQueue;

/**
 * @Author RenPu
 * @Date 2021/9/13 11:11
 * @Version 1.0
 * @Description: 分发消息，负责把消息从大队列塞到小队列里
 **/
public class DispatchMessageTask implements Runnable {
    @Override
    public void run() {

    }

//    @Override
//    public void run() {
//        BlockingQueue<Message> subQueue;
//        for (;;) {
//// 如果没有数据，则阻塞在这里
//            Message msg = MsgQueueFactory.getMessageQueue().take();
//// 如果为空，则表示没有Session机器连接上来，
//// 需要等待，直到有Session机器连接上来
//            while ((subQueue = getInstance().getSubQueue()) == null) {
//                try {
//                    Thread.sleep(1000);
//                } catch (InterruptedException e) {
//                    Thread.currentThread().interrupt();
//                }
//            }
//// 把消息放到小队列里
//            try {
//                subQueue.put(msg);
//            } catch (InterruptedException e) {
//                Thread.currentThread().interrupt();
//            }
//        }
//    }


//    /**
//     * 均衡获取一个子队列。
//     *
//     * @return
//     */
//    public BlockingQueue<Message> getSubQueue() {
//        int errorCount = 0;
//        for (;;) {
//            if (subMsgQueues.isEmpty()) {
//                return null;
//            }
//            int index = (int) (System.nanoTime() % subMsgQueues.size());
//            try {
//                return subMsgQueues.get(index);
//            } catch (Exception e) {
//// 出现错误表示，在获取队列大小之后，队列进行了一次删除操作
//                if ((++errorCount) < 3) {
//                    continue;
//                }
//            }
//        }
//    }


}
